package org.acm.seguin.refactor.method; import java.util.Iterator; import java.util.LinkedList; import org.acm.seguin.summary.FieldAccessSummary; import org.acm.seguin.summary.LocalVariableSummary; import org.acm.seguin.summary.MessageSendSummary; import org.acm.seguin.summary.MethodSummary; import org.acm.seguin.summary.Summary; /** * This class contains a static method to determine if the method in question * makes any references to the local object * *@author Chris Seguin */ class ObjectReference { /** * Determines if this object is referenced * *@param methodSummary the method summary *@return true if the object is referenced */ public static boolean isReferenced(MethodSummary methodSummary) { LinkedList locals = new LinkedList(); Iterator iter = methodSummary.getDependencies(); if (iter != null) { while (iter.hasNext()) { Summary next = (Summary) iter.next(); if (next instanceof LocalVariableSummary) { locals.add(next.getName()); } else if (next instanceof FieldAccessSummary) { FieldAccessSummary fas = (FieldAccessSummary) next; if ((fas.getPackageName() == null) && (fas.getObjectName() == null) && (!locals.contains(fas.getFieldName()))) { return true; } } else if (next instanceof MessageSendSummary) { MessageSendSummary mss = (MessageSendSummary) next; if ((mss.getPackageName() == null) && ((mss.getObjectName() == null) || (mss.getObjectName().equals("this")))) { return true; } } } } return false; } }